package com.swyc.osschat.Test.designMode.bridging.run;

import com.swyc.osschat.Test.designMode.bridging.base.MySystem;
import com.swyc.osschat.Test.designMode.bridging.impl.AviPlayer;
import com.swyc.osschat.Test.designMode.bridging.impl.Linux;
import com.swyc.osschat.Test.designMode.bridging.impl.Mp4Player;
import com.swyc.osschat.Test.designMode.bridging.impl.Windows;

/**
 * @description Java 桥接模式
 * 一、定义
 *  将抽象和实现分离，使他们可以独立变化，他是用组合关系代替继承关系来实现，从而降低了抽象和实现这两个可变维度的耦合度。.
 *  主要角色：
 *      抽象化：定义抽象类，并包含一个对实现化对象的引用。
 *      扩展抽象化：是抽象化角色的子类，实现父类的业务方法，并通过组合关系调用实现化角色中的业务方法。
 *      实现化：定义实现化角色的接口，供扩展抽象化角色调用。
 *      具体实现化：给出实现化角色接口的具体实现。
 * 二、代码实现
 *  举例：比如当前要开发一款跨平台播放器，Windows,Linux，要求可以播放Mp4和Avi格式的视频，其中操作系统和视频格式就是上面所说的两个可变维度，一个是操作系统，一个是视频格式，他是两个不同的维度。接下来看代码实现。
 *  桥接模式提高了系统的扩展性，可以在两个维度中任意扩展，不需要修改原有系统，拿上面的例子来说 如果要播放Wmv格式的视频，那么只需要定义一个Wmv类来实现实现化角色即可。符合开闭原则。
 * @Author: z156940l@outlook.com
 * @className Test
 * @Date: 2022/7/25 17:30
 */
public class Test {

    public static void main(String[] args) {
        //创建Windows系统
        MySystem windows = new Windows(new Mp4Player());
        windows.play();

        MySystem windows1 = new Windows(new AviPlayer());
        windows1.play();

        //创建Linux系统
        MySystem linux = new Linux(new Mp4Player());
        linux.play();

        MySystem linux1 = new Linux(new AviPlayer());
        linux1.play();
    }
}
